package dominio;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.uqbar.commons.utils.Observable;

import exceptions.ErrorTerreno;
@Observable
public class Jardin implements Serializable {

	private List<Fila> filas;

	public Jardin(List<Fila> fs) {
		this.filas = fs;
	}

	public Jardin(int cantFilas, int cantCasilleros) {
		this.filas = new ArrayList<Fila>(cantFilas);
		
		// La mitad de las filas son acuaticas
		for(int i = 0; i < cantFilas / 2; i++) {
			this.filas.add(new Fila(cantCasilleros, false));
		}
		
		// La otra mitad de las filas son terrestres
		while(this.filas.size() < cantFilas) {
			this.filas.add(new Fila(cantCasilleros, true));
		}
		
		/*
		// En este caso se inicializa el jardin con todas las filas terrestres
		for (int i = 0; i < cantFilas; i++) {
			this.filas.add(new Fila(cantCasilleros, true));
		}*/
	}
	
	/**
	 * 
	 * @param fila
	 * @param columna
	 * @param plantin
	 * @throws ErrorTerreno
	 *             cuando la planta no coincide en tipo de terreno
	 */
	public void plantar(int fila, int casillero, Planta plantin) {
		Planta plantaAPlantar = plantin.makeClone();
		System.out.println("clonando planta...");
		this.filas.get(fila).addPlanta(casillero, plantaAPlantar);
	}
	
	/**
	 * Reinicia el jardin desplantando todas las plantas
	 */
	public void reiniciar() {
		for(int i=0; i < this.getHeight(); i++) {
			this.getFilas().get(i).reiniciar();
		}
	}

	public List<Fila> getFilas() {
		return filas;
	}

	public void setFilas(List<Fila> filas) {
		this.filas = filas;
	}
	
	public int getWidth() {
		return this.filas.get(0).getCasilleros().size();
	}
	
	public int getHeight() {
		return this.filas.size();
	}
}
